package com.agm.android.sqllite.dao;

import java.util.ArrayList;
import java.util.List;

import com.agm.android.sqllite.SQLiteHelper;
import com.agm.dto.Utente;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class UtenteDataSource {

	// Database fields
	private SQLiteDatabase database;
	private SQLiteHelper dbHelper;
	private String[] allColumns = { SQLiteHelper.COLUMN_ID, SQLiteHelper.PASSWORD};

	public UtenteDataSource(Context context) {
		dbHelper = new SQLiteHelper(context);
	}

	public void open() throws SQLException {
		database = dbHelper.getWritableDatabase();
	}

	public void close() {
		dbHelper.close();
	}

	/**
	 * Metodo per l'inserimento di un utente nel DB
	 * @param username
	 * @param password
	 * @return
	 */
	public Utente createUtente(String username,String password) {
		ContentValues values = new ContentValues();
		values.put(SQLiteHelper.COLUMN_ID, username);
		values.put(SQLiteHelper.PASSWORD, password);
		long insertId = database.insert(SQLiteHelper.TABLE_COMMENTS, null, values);
		Cursor cursor = database.query(SQLiteHelper.TABLE_COMMENTS,	allColumns, SQLiteHelper.COLUMN_ID + " = '" + username +"'", null,
				null, null, null);
		cursor.moveToFirst();
		Utente utente = cursorToUtente(cursor);
		cursor.close();
		return utente;
	}

	/**
	 * Metodo che si occupa di cancellare l'utente
	 * @param utente
	 */
	public void deleteUtente(Utente utente) {
		String id = utente.getUserid();
		if(this.getAllUenti() != null && this.getAllUenti().size()>0){
			System.out.println("Utente deleted with id: " + id);
			database.delete(SQLiteHelper.TABLE_COMMENTS, SQLiteHelper.COLUMN_ID+ " = '" + id +"'", null);
		}
	}

	/**
	 * Metodo che si occupa di cancellare l'utente
	 * @param utente
	 */
	public void deleteAll() {
		if(this.getAllUenti() != null && this.getAllUenti().size()>0){
			System.out.println("Utente deleted all");
			database.delete(SQLiteHelper.TABLE_COMMENTS,SQLiteHelper.COLUMN_ID+ " <> " + null, null);
		}
	}

	/**
	 * Metodo per il recupero degli utenti
	 * @return
	 */
	public List<Utente> getAllUenti() {
		List<Utente> utenti = new ArrayList<Utente>();

		Cursor cursor = database.query(SQLiteHelper.TABLE_COMMENTS,allColumns, null, null, null, null, null);

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			Utente utente = cursorToUtente(cursor);
			utenti.add(utente);
			cursor.moveToNext();
		}
		cursor.close();
		return utenti;
	}

	/**
	 * Metodo che si occupa i convertire il cursore in oggetto utente
	 * @param cursor
	 * @return
	 */
	private Utente cursorToUtente(Cursor cursor) {
		Utente utente = new Utente();
		if(cursor != null){
			utente.setUserid(cursor.getString(0));
			utente.setPassword(cursor.getString(1));
		}
		return utente;
	}
}
